perm filename MET4.LSP[TIM,LSP]1 blob
sn#717380 filedate 1983-06-18 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 (declare (fasload meter)
C00007 ENDMK
Cā;
(declare (fasload meter)
(load "metint.lsp")
(setq meter:count-only t))
;;; Don't try to runtime this one.
(declare
(setq local-objects-of-interest
'(
((store (board (a ?x)) *) "Stores of (board (a x))")
((store (board (b ?x)) *) "Stores of (board (b x))")
((store (board (c ?x)) *) "Stores of (board (c x))")
((store (board ?x) *) "Stores of (board x)")
((store (sequence ?x) *) "Stores of (sequence x)")
((board ?x) "References of (board x)")
((sequence ?x) "References of (board x)"))))
(declare
(defun (board meter:expand-code) (form l avoid)
(reference-code form l avoid))
(defun (sequence meter:expand-code) (form l avoid)
(reference-code form l avoid))
(defun (store meter:expand-code) (form l avoid)
(let ((q (reference-code (cadr form) l avoid)))
(cond ((or (atom (caddr form))
(numberp (caddr form)))
`(,(car q) (store ,(cadr q) ,(caddr form))
,(caddr q)))
(t (let ((r (gensym)))
`(,(append (car q) (ncons r))
(store ,(cadr q) ,r)
,(append (caddr q)
(nconp
(meter:meter-funs l avoid (caddr form))))))))))
(defun reference-code (form l avoid)
(cond ((atom ?x)
`(() ,form ()))
(t (let ((r (gensym)))
`((,r)
,(subst r ?x form)
(,(meter:meter-funs l avoid ?x)))))))
)
(declare (array* (fixnum board 1 a 1 b 1 c 1 sequence 1))
(fixsw t)
(special answer final))
(eval-when (compile load eval)
(setq base 10. ibase 10.))
(array board fixnum 16.)
(array sequence fixnum 14.)
(array a fixnum 37.)
(array b fixnum 37.)
(array c fixnum 37.)
(fillarray 'board '(1))
(store (board 5) 0)
(fillarray 'a '(1 2 4 3 5 6 1 3 6 2 5 4 11 12 13 7 8 4
4 7 11 8 12 13 6 10 15 9 14 13 13 14 15 9 10 6))
(fillarray 'b '(2 4 7 5 8 9 3 6 10 5 9 8 12 13 14 8 9 5
2 4 7 5 8 9 3 6 10 5 9 8 12 13 14 8 9 5))
(fillarray 'c '(4 7 11 8 12 13 6 10 15 9 14 13 13 14 15 9 10 6
1 2 4 3 5 6 1 3 6 2 5 4 11 12 13 7 8 4))
(meter:meter triang
(meter-funs #.(all-objs)
(defun last-position ()
(mn "LAST-POSITION" lp)
(do ((i 1 (1+ i)))
((= i 16.) 0)
(cond ((= 1 (board i)) (return i))))))
(meter-funs #.(all-objs)
(defun try (i depth)
(mn "TRY" try)
(cond ((= depth 14)
(let ((lp (last-position)))
(cond ((member lp final))
(t (push lp final))))
(push (cdr (listarray 'sequence)) answer) t)
((and (= 1 (board (a i)))
(= 1 (board (b i)))
(= 0 (board (c i))))
(store (board (a i)) 0)
(store (board (b i)) 0)
(store (board (c i)) 1)
(store (sequence depth) i)
(do ((j 0 (1+ j))
(depth (1+ depth)))
((or (= j 36.)
(try j depth)) ()))
(store (board (a i)) 1)
(store (board (b i)) 1)
(store (board (c i)) 0)())))))
(defun gogogo (i)
(let ((answer ())
(final ()))
(try i 1)))